package top.jle.locker.integration;

import org.noear.solon.core.util.RunnableEx;
import org.redisson.api.RLock;

public interface Locker {
    /**
     加锁<br>
     若超时时间大于0，则超时后自动释放锁，但是没有看门狗自动续锁
    */
    void lock(String lockKey, long timeout, RunnableEx runnableEx);

    boolean tryLock(String prefix, String lockKey, long timeout);

    /**
     加锁 （看门狗）
     */
    void lock(String lockKey, RunnableEx runnableEx);
    /**
     加锁 （自定义前缀）<br>
     若超时时间大于0，则超时后自动释放锁，但是没有看门狗自动续锁
     */
    void lock(String prefix, String lockKey, long timeout, RunnableEx runnableEx);
    /**
     加锁 （自定义前缀，看门狗）<br>
     */
    void lock(String prefix, String lockKey, RunnableEx runnableEx);

    RLock getLock(String prefix, String lockKey);
}
